﻿Type.registerNamespace("MoniMisi2");

MoniMisi2.Referencia = function(element) {
    MoniMisi2.Referencia.initializeBase(this, [element]);
    this.IdProveedor = null;
    this.Proveedor = null;
    this.IdProveedorReferencia = null;
    this.ProveedorReferencia = null;
    this.ColumnaClave = null;
    this.ColumnaDescripcion = null;
    this.DelEncontrado = Function.createDelegate(this, this.Encontrado);
    this.DelLoad = Function.createDelegate(this, this.Load);


};

MoniMisi2.Referencia.prototype = {
    initialize: function() {
        MoniMisi2.Referencia.callBaseMethod(this, 'initialize');
        this.Proveedor = $find(this.IdProveedor);
        this.ProveedorReferencia = $find(this.IdProveedorReferencia);
        this.ProveedorReferencia.Asincronico = false;
        Sys.Application.add_load(this.DelLoad)

    },

    dispose: function() {
        MoniMisi2.Referencia.callBaseMethod(this, 'dispose');
    },

    Load: function() {
        this.ProveedorReferencia.Arribar();
        this.Proveedor.add_Encontrado(this.DelEncontrado);
        this.Proveedor.add_Agregado(this.DelEncontrado);
        this.Proveedor.add_Modificado(this.DelEncontrado);
        var Encon = this.Proveedor._events._list["Encontrado"].pop();
        this.Proveedor._events._list["Encontrado"].unshift(Encon);
        var Agreg = this.Proveedor._events._list["Agregado"].pop();
        this.Proveedor._events._list["Agregado"].unshift(Agreg);
        var Modi = this.Proveedor._events._list["Modificado"].pop();
        this.Proveedor._events._list["Modificado"].unshift(Modi);
    },

    Encontrado: function(sender, e) {
        if (e != undefined) {
            if (sender.Estructura[this._element.id + "_" + this.ColumnaDescripcion] == undefined) {
                sender.Estructura[this._element.id + "_" + this.ColumnaDescripcion] = "";
            }
            // Esto es porque OData pone los int64 como strings
            if (this.ProveedorReferencia.OData && this.Proveedor.OData) {
                var Lista = this.ProveedorReferencia.Indices[this.ProveedorReferencia.IndiceActual][this.ProveedorReferencia.PaginaActual].P;
                if (Lista.length > 0) {
                    var pValor = e[this.ColumnaClave];
                    var Mitad = 1;
                    var MenorValor = 0;
                    var MayorValor = Lista.length - 1;
                    var ValorEncontrado = "";
                    while (Mitad > 0) {
                        Mitad = Math.round((MayorValor - MenorValor) / 2);
                        ValorEncontrado = Lista[MenorValor + Mitad][this.ProveedorReferencia.Ordenes[this.ProveedorReferencia.IndiceActual].Columna];
                        if (ValorEncontrado == undefined) { ValorEncontrado = "" };
                        //if (parseInt(pValor, 10) > parseInt(ValorEncontrado, 10)) {
                        if (new Number(pValor) > new Number(ValorEncontrado)) {
                            MenorValor = MenorValor + Mitad;
                        } else {
                            MayorValor = MayorValor - Mitad;
                        }
                    }
                    if (new Number(pValor) > new Number(ValorEncontrado)) { MenorValor += 1 };
                    this.ProveedorReferencia.IrA({ Indice: this.ProveedorReferencia.IndiceActual, Pagina: this.ProveedorReferencia.PaginaActual, Registro: MenorValor });
                } else {
                    e[this._element.id + "_" + this.ColumnaDescripcion] = null;
                    return;
                }
            } else {
                this.ProveedorReferencia.Buscar({ Valor: e[this.ColumnaClave] })
            }
            e[this._element.id + "_" + this.ColumnaDescripcion] = this.ProveedorReferencia.Registro[this.ColumnaDescripcion];
        }

    },

    get_IdProveedor: function() {
        return this.IdProveedor;

    },
    set_IdProveedor: function(value) {
        if (this.IdProveedor !== value) {
            this.IdProveedor = value;
            this.raisePropertyChanged('IdProveedor');
        }
    },
    get_IdProveedorReferencia: function() {
        return this.IdProveedorReferencia;

    },
    set_IdProveedorReferencia: function(value) {
        if (this.IdProveedorReferencia !== value) {
            this.IdProveedorReferencia = value;
            this.raisePropertyChanged('IdProveedorReferencia');
        }
    },

    get_ColumnaClave: function() {
        return this.ColumnaClave;

    },
    set_ColumnaClave: function(value) {
        if (this.ColumnaClave !== value) {
            this.ColumnaClave = value;
            this.raisePropertyChanged('ColumnaClave');
        }
    },
    get_ColumnaDescripcion: function() {
        return this.ColumnaDescripcion;

    },
    set_ColumnaDescripcion: function(value) {
        if (this.ColumnaDescripcion !== value) {
            this.ColumnaDescripcion = value;
            this.raisePropertyChanged('ColumnaDescripcion');
        }
    }
};


MoniMisi2.Referencia.registerClass('MoniMisi2.Referencia', Sys.UI.Control);

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();